package task

import "sync"

/**
	全局维护一个任务队列
 */
type TaskerQueneManager struct {
	TasksQueue map[string] *UnitTask
	Lock *sync.Mutex
}
var QueueManager = &TaskerQueneManager{make(map[string]*UnitTask,0),new(sync.Mutex)}

/**
	向任务队列中注册任务
 */
func (v *TaskerQueneManager) RegistTask(task *UnitTask){
	v.Lock.Lock()
	v.TasksQueue[task.task.TaskName]=task
	defer v.Lock.Unlock()
}
/**
	执行带有定时逻辑的某个任务
 */
func (v *TaskerQueneManager) ExcuseCronTask(taskName string) {
	v.Lock.Lock()
	task := v.TasksQueue[taskName]
	if task!= nil {
		go task.cronRun()
	}
	defer v.Lock.Unlock()
}

/**
	停止一个任务
 */
func (v *TaskerQueneManager) StopTask(taskName string){
	v.Lock.Lock()
	task := v.TasksQueue[taskName]
	if task != nil {
		task.Pause =true
	}
	defer v.Lock.Unlock()
}
/**
	恢复一个任务
 */
func  (v *TaskerQueneManager)  StartTask(taskName string) {
	v.Lock.Lock()
	task := v.TasksQueue[taskName]
	if task != nil {
		task.Pause =false
	}
	defer v.Lock.Unlock()
}

/**
	关闭所有任务的数据库连接
 */
func (v *TaskerQueneManager) CloseAll(){
	for _,v:= range v.TasksQueue {
		v.db1.Close()
		v.db2.Close()
		v.dbDest.Close()
	}
}
